package com.gxc.linkedList;

/**
 * 链表之删除链表中间节点
 *
 * 比如链表是1 、2  删除节点1
 * 比如链表是1 、2、 3  删除节点2
 * 比如链表是1 、2 、3、4 删除节点2
 * 比如链表是1 、2 、3、4、5 删除节点3、
 * 比如链表是1 、2 、3、4、5 、6删除节点3
 */
public class RemoveMidNode {

    /**
     * 快慢指针可以循环到链表的中间节点
     * @param head
     * @return
     */
    public ListNode handle(ListNode head) {
        if (head == null || head.next == null) return head;
        ListNode node = new ListNode(-1);
        node.next = head;

        ListNode slow = node;
        ListNode fast = head;
        while (fast.next!=null && fast.next.next!=null) {
            slow = slow.next;
            fast = fast.next.next;
        }
        slow.next=slow.next.next;
        return node.next;
    }

    public static class ListNode {
        int val;
        RemoveMidNode.ListNode next;
        ListNode() {}
        ListNode(int val) { this.val = val; }
        ListNode(int val, RemoveMidNode.ListNode next) { this.val = val; this.next = next; }
    }
}
